﻿using Autofac;
using Microsoft.AspNetCore.Mvc;

namespace JIESHINet.Extension
{
    public class AutofacPropertityModuleRegister : Module
    {
        /// <summary>
        /// 对控制器进行服务注册，并支持通过属性访问
        /// </summary>
        /// <param name="builder"></param>
        protected override void Load(ContainerBuilder builder)
        {
            //获取 ControllerBase 类型，这是 ASP.NET Core MVC 中所有控制器的基类。
            var controllerBaseType = typeof(ControllerBase);
            //使用 RegisterAssemblyTypes 方法注册当前程序集中的所有类型。
            //使用 Where 方法选择那些派生自 ControllerBase 类型但不是 ControllerBase 自身的类型。这通常是您自定义的控制器类。
            //使用 PropertiesAutowired 方法启用属性自动注入，使依赖属性可以被自动解析和注入。
            builder.RegisterAssemblyTypes(typeof(Program).Assembly).
                Where(t=>controllerBaseType.IsAssignableFrom(t)&&t!=controllerBaseType)
                .PropertiesAutowired();

        }
    }
}
